namespace Nua
{
	// Describes what kind of value a token represents
	[System.Flags]
	public enum TokenKind: ulong
	{
        Nothing             = 0x0000000000000000ul,
		// Scanner detected an error
		Error				= 0x0000000000000001ul,

		// Function, variable name, etc.
		Identifier			= 0x0000000000000002ul,	

		// String constant
		StringLiteral		= 0x0000000000000004ul,

		// Numeric constant
		NumericLiteral		= 0x0000000000000008ul,

		// Punctuation
		Plus				= 0x0000000000000010ul,
		Minus				= 0x0000000000000020ul,
		Star				= 0x0000000000000040ul,
		Slash				= 0x0000000000000080ul,
		Caret				= 0x0000000000000100ul,
		Equals				= 0x0000000000000200ul,
		TildeEquals			= 0x0000000000000400ul,
		LessEquals			= 0x0000000000000800ul,
		GreaterEquals		= 0x0000000000001000ul,
		Less				= 0x0000000000002000ul,
		Greater				= 0x0000000000004000ul,
		EqualsEquals		= 0x0000000000008000ul,
		LeftRound			= 0x0000000000010000ul,
		RightRound			= 0x0000000000020000ul,
		LeftCurly			= 0x0000000000040000ul,
		RightCurly			= 0x0000000000080000ul,
		LeftSquare			= 0x0000000000100000ul,
		RightSquare			= 0x0000000000200000ul,
		Semi				= 0x0000000000400000ul,
		Colon				= 0x0000000000800000ul,
		Comma				= 0x0000000001000000ul,
		Dot					= 0x0000000002000000ul,
		DotDot				= 0x0000000004000000ul,
		DotDotDot			= 0x0000000008000000ul,

		// Reserved words

		And					= 0x0000000010000000ul,		
		Break				= 0x0000000020000000ul,
		Do					= 0x0000000040000000ul,
		Else				= 0x0000000080000000ul,
		ElseIf				= 0x0000000100000000ul,
		End					= 0x0000000200000000ul,
		False				= 0x0000000400000000ul,
		For					= 0x0000000800000000ul,
		Function			= 0x0000001000000000ul,
		If					= 0x0000002000000000ul,
		In					= 0x0000004000000000ul,
		Local				= 0x0000008000000000ul,
		Nil					= 0x0000010000000000ul,
		Not					= 0x0000020000000000ul,
		Or					= 0x0000040000000000ul,
		Repeat				= 0x0000080000000000ul,
		Return				= 0x0000100000000000ul,
		Then				= 0x0000200000000000ul,
		True				= 0x0000400000000000ul,
		Until				= 0x0000800000000000ul,
		While				= 0x0001000000000000ul,

		// No more input
		EndOfFile			= 0x0002000000000000ul
	}
}
